package rfile

import (
	"os"
	"time"
)

// FileInfo 定义了获取文件信息的接口，包含文件基本属性及时间信息
type FileInfo interface {
	// Name 获取文件名称（不含路径）
	Name() string
	// Size 获取文件大小（字节数）
	Size() int64
	// Mode 获取文件模式（权限和类型）
	Mode() os.FileMode
	// IsDir 检测文件是否为目录
	IsDir() bool
	// Sys 获取系统原始文件信息（因系统而异）
	Sys() any
	// CreateTime 获取文件创建时间
	CreateTime() time.Time
	// ModifyTime 获取文件最后修改时间
	ModifyTime() time.Time
}

// fileStat 是FileInfo接口的实现，内部封装os.FileInfo
type fileStat struct {
	fileInfo os.FileInfo
}

// NewFileStat 根据文件路径创建fileStat实例
// 参数filePath为文件的绝对路径或相对路径
// 返回fileStat实例指针和可能的错误（如文件不存在、权限不足等）
func NewFileStat(filePath string) (*fileStat, error) {
	fileinfo, err := os.Stat(filePath)
	if err != nil {
		return nil, err
	}
	return &fileStat{
		fileInfo: fileinfo,
	}, nil
}

// Name 实现FileInfo接口的Name方法，返回文件名称
func (fs *fileStat) Name() string {
	return fs.fileInfo.Name()
}

// Size 实现FileInfo接口的Size方法，返回文件大小（字节数）
func (fs *fileStat) Size() int64 {
	return fs.fileInfo.Size()
}

// Mode 实现FileInfo接口的Mode方法，返回文件模式
func (fs *fileStat) Mode() os.FileMode {
	return fs.fileInfo.Mode()
}

// ModifyTime 实现FileInfo接口的ModifyTime方法，返回文件最后修改时间
func (fs *fileStat) ModifyTime() time.Time {
	return fs.fileInfo.ModTime()
}

// IsDir 实现FileInfo接口的IsDir方法，判断是否为目录
func (fs *fileStat) IsDir() bool {
	return fs.fileInfo.IsDir()
}

// Sys 实现FileInfo接口的Sys方法，返回系统原始文件信息
func (fs *fileStat) Sys() any {
	return fs.fileInfo.Sys()
}

// 获取创建事件需要通过Sys的内容
